跳到主要内容

玩家 UI 组件

相关源文件

目的与范围

本页记录 Adventure-King 中用于展示并与玩家状态交互的 UI 组件。这些组件可视化玩家属性(HP/MP/XP)、技能(冷却、槽位)、装备与成长进度。所有玩家 UI 组件遵循一致的绑定模式:持有 PlayerCharacter 的引用,并在周期性更新中读取其状态。

关于 UI 状态管理与编排(暂停菜单、可见性控制、模态切换),请参见 GameUIController。关于驱动玩家动作的键盘输入处理,请参见 GameInputController。关于具体组件的细节实现,请参见 InventoryLayerHUD Elements

组件架构

组件层级

来源Classes/GameUI.cpp L32-L88

Classes/GameUI.h L32-L270

组件初始化顺序

GameUI 会在 init() 中按固定顺序创建所有 UI 组件,以建立正确的 z-order:

组件创建方法Z-Order用途
PlayerStatusBarcreatePlayerStatusBar()10HP/MP/XP 显示
SkillBarcreateSkillBar()10技能槽位与冷却
BossHealthBarcreateBossHealthBar()10Boss 血条与破韧条
PauseMenucreatePauseMenu()100暂停相关操作
InventoryLayercreateInventoryLayer()101装备/技能/属性管理(模态界面)
PlayerDeathMenucreateDeathMenu()200死亡菜单(强制暂停,阻断其它 UI)
BlessingNpcLayercreateBlessingNpcLayer()220赐福 NPC 弹窗(覆盖背包/暂停)
InteractionHintcreateInteractionHint()10门/NPC 交互提示
LevelNameLabelcreateLevelNameLabel()10当前关卡名显示
MapButtoncreateMapButton()10返回地图按钮
InventoryButtoncreateInventoryButton()10HUD 背包按钮(等同按 B)

更新节流与刷新边界

GameUIController::update(dt) 每帧运行,但会把“UI 全量刷新”做节流(默认 0.05s 一次),同时单独对交互提示做每帧检查以保证响应性。

交互提示更新:

来源Classes/Scenes/GameUIController.cpp L357-L399

Classes/GameUI.cpp L422-L441

Classes/UI/InventoryLayer.cpp L804-L827

与 GameUIController 的集成

可见性状态管理

GameUIController 会编排各模态界面的显示/隐藏,以避免 UI 冲突。优先级层级如下:

  1. 死亡菜单(最高)- 阻断所有输入,仅显示重开/返回选项
  2. 祝福 NPC - 阻断玩法输入,允许 NPC 交互
  3. 背包 - 阻断玩法输入,允许背包管理
  4. 暂停菜单 - 阻断玩法输入,显示暂停选项
  5. HUD(常驻)- 状态条、技能条、提示等

上下文标记:

标记类型用途
_pausedbool游戏模拟是否暂停
_inventoryReturnToPauseOnClosebool从暂停菜单进入背包 → 关闭时返回暂停
_deathMenuShowingbool(通过 GameUI)死亡菜单激活 → 阻断其他 UI

可见性切换流程:

ESC 键行为(按优先级顺序):

来源Classes/Scenes/GameUIController.cpp L401-L445

Classes/Scenes/GameUIController.cpp L447-L481

Classes/Scenes/GameUIController.h L16-L83

组件访问方法

GameUIGameUIController 提供了一组 accessor 方法,以控制可见性:

方法用途模态 Z-Order
showPauseMenu() / hidePauseMenu()显示/隐藏暂停遮罩100
showInventory() / hideInventory()显示/隐藏装备/技能 UI101
showBlessingNpc() / hideBlessingNpc()显示/隐藏 NPC 增益选择220
showDeathMenu() / hideDeathMenu()显示/隐藏死亡界面200
isPauseMenuShowing() / isInventoryShowing() / 等查询可见性状态N/A

回调注册:

  • PauseMenuresumeCallbacksaveCallbackloadCallbackinventoryCallback 注册给 GameUIController
  • InventoryLayer 注册 closeCallback,用于决定关闭后的返回状态
  • PlayerDeathMenu 注册 restartCallbackreturnToMapCallback

来源Classes/GameUI.cpp L303-L364

Classes/Scenes/GameUIController.cpp L80-L231

Classes/GameUI.h L88-L149